import { ApiRes, Profile } from '@/types/data'
import request from '@/utils/request'
import { getProfile, removeProfile, setProfile } from '@/utils/storage'
import { defineStore } from 'pinia'
import useStore from '@/store'
export default defineStore({
  id: 'user',
  // 状态
  state: () => ({
    // 用户信息
    profile: getProfile() as Profile
  }),
  // 方法
  actions: {
    // 获取手机验证码
    async sendMobileMsg (mobile: string) {
      await request.get('/login/code', {
        params: {
          mobile
        }
      })
    },
    // 绑定qq的短信验证码
    async sendQQBindMsg (mobile: string) {
      await request.get('/login/social/code', {
        params: {
          mobile
        }
      })
    },
    // 用户名和密码登录
    async login (account: string, password: string) {
      const res = await request.post<ApiRes<Profile>>('/login', {
        account,
        password
      })
      // 1. 保存用户信息到 state 中
      this.profile = res.data.result

      setProfile(res.data.result)
    },

    async mobileLogin (mobile: string, code: string) {
      const res = await request.post<ApiRes<Profile>>('/login/code', {
        mobile,
        code
      })
      // 1. 保存用户信息到 state 中
      this.profile = res.data.result
      setProfile(res.data.result)
    },

    async qqLogin (openId: string) {
      const res = await request.post<ApiRes<Profile>>('/login/social', {
        unionId: openId,
        source: 6
      })
      // 1. 保存用户信息到 state 中
      this.profile = res.data.result
      setProfile(res.data.result)
    },
    async qqBindLogin (openId: string, mobile: string, code: string) {
      const res = await request.post<ApiRes<Profile>>('/login/social/bind', {
        mobile,
        code,
        unionId: openId
      })
      // 1. 保存用户信息到 state 中
      this.profile = res.data.result
      setProfile(res.data.result)
    },

    logout () {
      this.profile = {} as Profile
      removeProfile()
      // 清空购物车数据
      const { cart } = useStore()
      cart.clearCart()
    }
  }
})
